package com.qq.多线程.Thread_API;


/*
 * 
 * 
	Thread常用API说明
	Thread常用方法：获取线程名称getName()、设置名称setName()、获取当前线程对象currentThread()。
	至于Thread类提供的诸如：yield、join、interrupt、不推荐的方法 stop 、守护线程、线程优先级等线程的控制方法，
	在开发中很少使用，这些方法会在高级篇以及后续需要用到的时候再为大家讲解。
	
	1. 当有很多线程在执行的时候，我们怎么去区分这些线程呢？
	此时需要使用Thread的常用方法：getName()、setName()、currentThread()等。
	
构造器：
	public Thread(String name)						可以为当前线程指定名称 ,
	public Thread(Runnable target)					封装Runnable对象成为线程对象
	public Thread(Runnable target ，String name )	封装Runnable对象成为线程对象，并指定线程名称
	
方法：	
	public void run()						线程任务方法
	public void start()						线程启动方法
	public static void sleep(long time)		让当前线程休眠指定的时间后再继续执行，单位为毫秒。
	public String getName​()					获取当前线程的名称，默认线程名称是Thread-索引
	public void setName​(String name)		将此线程的名称更改为指定的名称，通过构造器也可以设置线程名称
	
	public static Thread currentThread()：	返回对当前正在执行的线程对象的引用
	1、此方法是Thread类的静态方法，可以直接使用Thread类调用。
 	2、这个方法是在哪个线程执行中调用的，就会得到哪个线程对象
 	
	public final void join()				让调用这个方法的线程先执行（完），再往下执行（阻塞主线程）
	join(): 即join(0)，		主线程无限等待子进程结束，主线程方可执行。
    join(long millis)：		主线程需等待子进程*毫秒，主线程方可执行。
    

	

    目标：线程的API
 */
public class Test1 {
    // main方法是由主线程负责调度的，相当于线程的run方法内部，然后系统内部默认调用了start方法
    public static void main(String[] args) {
//    	实际开发不会给线程取名，因为有默认名称，按创建顺序取名。
        Thread t1 = new MyThread("1号");//默认名称：Thread-0
        // t1.setName("1号");
        t1.start();
        System.out.println(t1.getName());
        

        Thread t2 = new MyThread("2号");//默认名称：Thread-1
        // t2.setName("2号");
        t2.start();
        System.out.println(t2.getName());
        

        // 哪个线程执行它，它就返回哪个线程对象（当前线程对象）和this有的像
        Thread m = Thread.currentThread();
        System.out.println(m.getName());// 主线程默认名称：main
        m.setName("最牛的线程");

        for (int i = 0; i < 5; i++) {
            System.out.println( m.getName() + "输出：" + i);
        }
        
        
        
    }
}

